/*
 * Copyright (c) 2018.
 * http://www.ulabcare.com
 */

package com.mt.roll.upms.service;

import com.mt.roll.core.params.EnabledParam;
import com.mt.roll.core.params.IdListParam;
import com.mt.roll.core.params.IdParam;
import com.mt.roll.core.vo.*;
import com.mt.roll.upms.params.MenuParam;
import com.mt.roll.upms.params.MenuQueryParam;
import com.mt.roll.upms.params.RoleMenuParam;

import java.util.List;


/**
 * 菜单服务接口
 *
 * @author jiff
 * @date 2018/11/14
 * @since 1.0
 */
public interface MenuService {

    /**
     * 获取菜单
     *
     * @param idParam 主键参数
     * @return 菜单
     */
    R<MenuVo> get(IdParam idParam);

    /**
     * 获取菜单列表
     *
     * @param menuQueryParam 菜单查询参数
     * @return 菜单列表
     */
    R<List<MenuVo>> list(MenuQueryParam menuQueryParam);

    /**
     * 获取菜单分页列表
     *
     * @param menuQueryParam 菜单查询参数
     * @return 菜单分页列表
     */
    R<PageVo<MenuVo>> page(MenuQueryParam menuQueryParam);

    /**
     * 新增菜单
     *
     * @param menuParam 菜单参数
     * @return 主键
     */
    R<IdVo> add(MenuParam menuParam);

    /**
     * 更新菜单
     *
     * @param menuParam 菜单参数
     * @return 主键
     */
    R<IdVo> update(MenuParam menuParam);

    /**
     * 启用停用
     *
     * @param enabledParam 启停参数
     * @return 主键
     */
    R<IdVo> enabled(EnabledParam enabledParam);

    /**
     * 删除菜单
     *
     * @param idParam 主键参数
     * @return 主键
     */
    R<IdVo> delete(IdParam idParam);

    /**
     * 批量删除菜单
     *
     * @param idListParam 主键列表参数
     * @return 主键列表
     */
    R<IdListVo> delete(IdListParam idListParam);

    /**
     * 保存角色菜单
     *
     * @param roleMenuParam 角色菜单参数
     * @return 主键列表
     */
    R<IdListVo> saveRoleMenu(RoleMenuParam roleMenuParam);

    /**
     * 获取菜单列表
     *
     * @param idParam 主键参数
     * @return 菜单列表
     */
    R<List<MenuVo>> listByRole(IdParam idParam);
}
